package com.axzhengxin.platform.common.service;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.ruoyi.common.utils.StringUtils;
import org.apache.commons.collections4.CollectionUtils;

import java.util.Objects;
import java.util.Optional;

/**
 * IDbExecService
 * 数据库访问代理服务接口
 *
 * @author jiangnan
 * @date 2021/2/23
 */
public interface IDbExecService {

    /**
     * 执行数据库访问请求
     *
     * @param sqlId 查询语句ID
     * @param args  参数列表
     * @return 执行结果
     */
    JSONArray invoke(String sqlId, Object... args);

    /**
     * 使用企业名称查询基本信息
     *
     * @param entName 企业名称
     * @return 基本信息，以{@link Optional}包装
     */
    Optional<JSONObject> getJbxxByEntName(String entName);

    /**
     * 使用企业名称查询法人信息
     *
     * @param entName 企业名称
     * @return 法人信息，以{@link Optional}包装
     */
    Optional<String> getLerpNameByEntName(String entName);

    /**
     * 查询股东及出资登记信息
     *
     * @param entId 工商库企业ID
     * @return 股东及出资登记信息集合
     */
    JSONArray getGdjczdj(String entId);

    /**
     * 查询工商库字典表
     *
     * @param bName 名称
     * @param bType 类型
     * @param bKey  码值
     * @return 说明
     */
    String getDictValue(String bName, String bType, String bKey);

    /**
     * 简化版查询工商库字典表
     *
     * @param bName 名称
     * @param bKey  码值
     * @return 说明
     */
    String getGsCodeLibraryByBkeyBname(String bName, String bKey);

    /**
     * 查询法人及高管信息
     *
     * @param entId 工商库企业ID
     * @return 法人及高管信息集合
     */
    JSONArray getZyry(String entId);

    /**
     * 查询变更登记信息
     *
     * @param entId 工商库企业ID
     * @return 变更登记信息集合
     */
    JSONArray getJbxxBg(String entId);

    /**
     * 查询经营异常记录
     *
     * @param entId 工商库企业ID
     * @return 经营异常记录集合
     */
    JSONArray getJyyc(String entId);

    /**
     * 查询行政处罚记录
     *
     * @param entId 工商库企业ID
     * @return 行政处罚记录集合
     */
    JSONArray getXzcf(String entId);

    /**
     * 获取徽商银行字典表数据
     *
     * @param itemno 码值
     * @param codeno 大类
     * @return 说明
     */
    String getHshyCodeByColValueAndName(String itemno, String codeno);

    /**
     * 从JSONArray中获取第一个元素的指定字段
     * 空JSONArray或没有该字段的，返回空字符串
     *
     * @param arr 待处理JSONArray
     * @param key 字段名
     * @return 字段值
     */
    static String getField(JSONArray arr, String key) {
        if (!CollectionUtils.isEmpty(arr)) {
            JSONObject jo = arr.getJSONObject(0);
            if (!Objects.isNull(jo) && jo.containsKey(key)) {
                return jo.getString(key);
            }
        }
        return StringUtils.EMPTY;
    }

}
